#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
Smart Home Butler ASR System CLI
智能管家语音识别系统命令行界面
"""

import argparse
import sys
import os
from .optimized_realtime_asr import OptimizedRealTimeASR
from .websocket_server import ASRWebSocketServer


def main():
    """主函数"""
    parser = argparse.ArgumentParser(
        description="Smart Home Butler ASR System - 智能管家语音识别系统",
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog="""
使用示例:
  %(prog)s                    # 运行实时语音识别
  %(prog)s --websocket        # 启动WebSocket服务器
  %(prog)s --model-dir path   # 指定自定义模型路径
        """
    )
    
    parser.add_argument(
        "--model-dir",
        default="iic/SenseVoiceSmall",
        help="ASR模型路径 (默认: iic/SenseVoiceSmall)"
    )
    
    parser.add_argument(
        "--model-cache-dir",
        default=None,
        help="模型缓存目录路径 (默认: None，使用系统默认路径)"
    )
    
    parser.add_argument(
        "-v", "--version",
        action="version",
        version="%(prog)s 1.0.0"
    )
    
    parser.add_argument(
        "--websocket",
        action="store_true",
        help="启动WebSocket服务器模式"
    )
    
    parser.add_argument(
        "--ws-host",
        default="localhost",
        help="WebSocket服务器主机地址 (默认: localhost)"
    )
    
    parser.add_argument(
        "--ws-port",
        type=int,
        default=8765,
        help="WebSocket服务器端口 (默认: 8765)"
    )
    
    args = parser.parse_args()
    
    # 设置默认模型缓存目录为项目下的models目录
    if args.model_cache_dir is None:
        args.model_cache_dir = os.path.join(os.getcwd(), "model_cache_dir")
    
    # 确保模型缓存目录存在
    os.makedirs(args.model_cache_dir, exist_ok=True)
    
    # 设置MODELSCOPE_CACHE环境变量，确保模型缓存到正确的目录
    # 注意：ModelScope会在指定目录下创建models子目录，所以我们直接使用models目录
    os.environ['MODELSCOPE_CACHE'] = args.model_cache_dir
    
    try:
        if args.websocket:
            # 启动WebSocket服务器
            print("正在启动智能管家语音识别WebSocket服务器...")
            print(f"服务器地址: {args.ws_host}:{args.ws_port}")
            print(f"使用模型: {args.model_dir}")
            if args.model_cache_dir:
                print(f"模型缓存目录: {args.model_cache_dir}")
            print("-" * 50)
            
            server = ASRWebSocketServer(
                model_dir=args.model_dir,
                model_cache_dir=args.model_cache_dir,
                host=args.ws_host,
                port=args.ws_port
            )
            server.run()
        else:
            # 运行实时语音识别
            print("正在启动智能管家语音识别系统...")
            print(f"使用模型: {args.model_dir}")
            if args.model_cache_dir:
                print(f"模型缓存目录: {args.model_cache_dir}")
            print("-" * 50)
            
            # 创建并运行ASR系统
            asr = OptimizedRealTimeASR(
                model_dir=args.model_dir,
                model_cache_dir=args.model_cache_dir
            )
            asr.run()
        
    except KeyboardInterrupt:
        print("\n系统已退出")
        sys.exit(0)
    except Exception as e:
        print(f"系统运行出错: {e}")
        sys.exit(1)


if __name__ == "__main__":
    main()